// 读取到的数据库表结构的文件名

use lazy_static::lazy_static;
use std::sync::RwLock;


pub struct Config {

    pub db_connection: String, 
    pub sql_files_path: String, 
    pub sql_output_path: String, 
    pub sql_output_num: usize,
    pub sql_timeout_sec: u64,
    pub sql_exec_min_sec: f64,
    pub sql_output_count: usize,

    pub num_of_unique_values: u32, // 在数据库获取表信息时，唯一值unique_values的最大数量，默认 20
    pub join_conditions_probability: f64, // 连接条件生成的概率 默认 0.7
    pub num_constraints_range: usize, // 定义约束条件数量的随机范围，默认最大 10
    pub constraint_probability: f64, // 有多大概率选择 IN 的表达式， 否则就是 is not NULL 默认 0.85
    pub null_probability: f64,     // 有多大概率生成 is not NULL， 否则就是 is NULL 默认 0.5
    pub num_values: usize,           // IN 表达式中，唯一值的数量，默认是 7
    pub select_fields_probability: f64, // 有多少的概率生成 COUNT(*)， 默认 0.4
    pub num_max_minormax: usize, // 不生成 SELECT COUNT(*) 的话，生成 SELECT [聚合函数]，生成[聚合函数]的最大数量 默认 10
    pub num_max_tables: usize,   // 随机选取一定数量的表 默认 12
    pub limit_ranges: Vec<(f64, u32)>, // 生成LIMIT子句, Vec<概率，最大值>

    pub table_info_filename: String, 
    pub table_info_foreign_filename: String, 
}

lazy_static! {
    pub static ref CONFIG: RwLock<Config> = RwLock::new(Config {
        db_connection: "host=localhost user=imdb password=imdb dbname=imdb".to_string(), 
        sql_files_path: "D:\\gitcode\\bao_modify\\sample_queriesCopy".to_string(), 
        sql_output_path: "D:\\gitcode\\bao_modify\\sqlmaker_output".to_string(), 
        sql_output_num: 10,
        sql_timeout_sec: 1,
        sql_exec_min_sec: 0.0,
        sql_output_count: 0,

        num_of_unique_values: 20,
        join_conditions_probability: 0.7,
        num_constraints_range: 10,
        constraint_probability: 0.85,
        null_probability: 0.5,     
        num_values: 7,
        select_fields_probability: 0.4,
        num_max_minormax: 10,
        num_max_tables: 12,

        limit_ranges: vec![(0.25, 10), (0.5, 100), (0.75, 1000), (1.0, 10000),],

        table_info_filename: "table_info.json".to_string(), 
        table_info_foreign_filename: "updated_tables.json".to_string(), 
    });
}
